日期：2023/8/18 出题人：mq白\\

题目的要求非常简单，在很多其他语言里也经常提供这种东西（一般是反射）。 但是显而易见 C++ 没有反射。

我们给出代码：

\begin{minted}[mathescape,	
    linenos,
    numbersep=5pt,
    gobble=2,
    frame=lines,
    framesep=2mm]{c++}
    int main() {
        struct X { std::string s{ " " }; }x;
        struct Y { double a{}, b{}, c{}, d{}; }y;
        std::cout << size<X>() << '\n';
        std::cout << size<Y>() << '\n';
    
        auto print = [](const auto& member) {
            std::cout << member << ' ';
        };
        for_each_member(x, print);
        for_each_member(y, print);
    }
\end{minted}

要求自行实现 for\_each\_member 以及 size 模板函数。 要求支持任意自定义类类型（聚合体）的数据成员遍历（聚合体中存储数组这种情况不需要处理）。 这需要打表，那么我们的要求是支持聚合体拥有 0 到 4 个数据成员的遍历。

\begin{tcolorbox}[title = {要求运行结果},
    fonttitle = \bfseries, fontupper = \sffamily, fontlower = \itshape]
    1           

    4           

    ~~0 0 0 0
\end{tcolorbox}

\begin{itemize}
\item \textbf{难度}： \hardscore{4} \\
      \textbf{提示}：\href{https://akrzemi1.wordpress.com/2020/10/01/reflection-for-aggregates/}{学习}，boost::pfr。
\end{itemize}